package com.hmall.item.web;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hmall.common.dto.PageDTO;
import com.hmall.item.pojo.Item;
import com.hmall.item.service.IItemService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@RestController
@RequestMapping("/item")
@Slf4j
public class ItemController {

    @Autowired
    private IItemService itemService;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 分页查询商品
     * @param page 当前页码
     * @param size 每页显示的数据量
     * @return
     */
    @GetMapping("/list")
    public PageDTO pageList(@RequestParam("page") Integer page, @RequestParam("size") Integer size){
        // 构造分页对象
        Page<Item> pageInfo = new Page<>(page,size);

        // 调用业务层方法,分页查询
        itemService.page(pageInfo);

        return new PageDTO<>(pageInfo.getTotal(),pageInfo.getRecords());
    }

    /**
     * 根据id查询商品
     * @param id 要查询的商品id
     * @return
     */
    @GetMapping("{id}")
    public Item getById(@PathVariable Long id){
       return itemService.getById(id);
    }

    /**
     * 新增商品
     * @param item
     * @return
     */
    @PostMapping
    public String addItem(@RequestBody Item item){
        boolean save = itemService.save(item);
        if (save) {
            return "新增成功";
        }else {
            return "新增失败";
        }
    }

    /**
     * 根据商品id修改商品状态
     * @param id 商品id
     * @param status 状态码
     */
    @PutMapping("/status/{id}/{status}")
    public void updateItemStatus(@PathVariable("id") Long id, @PathVariable("status") Integer status){
        itemService.updateStatus(id, status);
    }

/*

    @PutMapping("/status/{id}/{status}")
    public void status(@PathVariable Long id,@PathVariable Integer status){
        // 根据id获取商品
        Item item = itemService.getById(id);
        // 设置商品修改后的状态
        item.setStatus(status);
        // 保存到数据库
        itemService.updateById(item);

        // 根据上下架判断RoutingKey
        String routingKey = status == 1 ? "item.up" : "item.down";
        // 放入mq中
        rabbitTemplate.convertAndSend("item.topic",routingKey, JSON.toJSONString(item));
        log.info("商品状态更改,已经将数据放入到MQ中");
    }
*/

    /**
     * 修改商品
     * @param item
     */
    @PutMapping
    public String updateItem(@RequestBody Item item){
        boolean update = itemService.updateById(item);
        if (update) {
            return "修改成功";
        }else {
            return "修改失败";
        }
    }

    /**
     * 根据id删除商品
     * @param id 要删除的商品id
     * @return
     */
    @DeleteMapping("{id}")
    public String deleteItem(@PathVariable Long id){
        Integer status = itemService.getById(id).getStatus();
        if (status == 1) {
            return "当前商品处于上架状态,不能删除";
        }
        boolean remove = itemService.removeById(id);
        if (remove) {
            return "删除成功";
        }else {
            return "删除失败";
        }
    }

    /**
     * 根据商品id修改库存
     * @param itemId
     * @param num
     */
    @PutMapping("/stock/{itemId}/{num}")
    public void updateStock(@PathVariable("itemId") Long itemId, @PathVariable("num") Integer num){
        itemService.deductStock(itemId, num);
    }
}
